package com.jh.paymentchannel.helipay.service;

import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import com.jh.paymentchannel.util.Util;

import cn.jh.common.utils.CommonConstants;
import net.sf.json.JSONObject;

@EnableScheduling
@Configuration
public class XF_HistoryTaskService {
	@Autowired
	Util util;

	@Value("${schedule-task.on-off}")
	private String scheduleTaskOnOff;

	private static final Logger log = LoggerFactory.getLogger(XF_HistoryTaskService.class);

	/* 5点执行一次 */
	@Scheduled(cron = "0 0 5 * * ?")
	public void theWayOnXF() {
		/* 获取开始到结束的五分钟时间段[00:00:00~00:04:00] */
		if ("true".equals(scheduleTaskOnOff)) {
			Date date = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			String end = sdf.format(date) + " 00:00";
			Calendar calendar = Calendar.getInstance();
			calendar.setTimeInMillis(date.getTime() - 86400000);
			String start = sdf.format(calendar.getTime()) + " 00:00";
			/* 根据执行时间查询任务 */
			RestTemplate restTemplate = new RestTemplate();
			URI uri = util.getServiceUrl("paymentchannel", "error url request!");
			String url = uri.toString() + "/v1.0/paymentchannel/spend/find/bytime";
			log.info("==============" + url + "===============");
			MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<String, String>();
			requestEntity.add("start", start);
			requestEntity.add("end", end);
			log.info("接口/v1.0/paymentchannel/spend/find/bytime--参数================" + start + "," + end);
			String result = restTemplate.postForObject(url, requestEntity, String.class);
			log.info("接口/v1.0/paymentchannel/spend/find/bytime--RESULT================" + result);
			JSONObject jsonObject = JSONObject.fromObject(result);
			List<JSONObject> list = null;
			if (jsonObject.containsKey("result")) {
				list = (List) jsonObject.get("result");
			} else {
				return;
			}

			for (int i = 0; i < list.size(); i++) {
				JSONObject art = list.get(i);
				String P5_orderId = art.getString("orderCode");
				String P3_userId = art.getString("userId");
				String P4_bindId = art.getString("bindId");
				String id = art.getString("id");
				// P8_orderAmount =
				// String.valueOf((Float.valueOf(P8_orderAmount) + 0.5));
				// P8_orderAmount = String.valueOf(new
				// BigDecimal(P8_orderAmount).divide(new
				// BigDecimal("0.9998"),2,RoundingMode.DOWN));
				String amount = art.getString("amount");
				String payCard = art.getString("payCard");
				/* 根据bindid查询用户到账卡号、手机号 */
				uri = util.getServiceUrl("paymentchannel", "error url request!");
				url = uri.toString() + "/v1.0/paymentchannel/hlregister/findbycard";
				requestEntity = new LinkedMultiValueMap<String, String>();
				requestEntity.add("bindId", P4_bindId);
				result = restTemplate.postForObject(url, requestEntity, String.class);
				log.info("接口/v1.0/paymentchannel/hlregister/findbycard--RESULT================" + result);
				jsonObject = JSONObject.fromObject(result);
				String bankCard = null;
				String phone = null;
				String loginPhone = null;
				if (jsonObject.containsKey("result")) {
					JSONObject jobj = jsonObject.getJSONObject("result");
					bankCard = jobj.getString("bankCard");
					phone = jobj.getString("phone");
					loginPhone = jobj.getString("loginPhone");
				} else {
				}
				/* 根据userid查询用户贴牌 */
				uri = util.getServiceUrl("user", "error url request!");
				url = uri.toString() + "/v1.0/user/find/by/userid";
				requestEntity = new LinkedMultiValueMap<String, String>();
				requestEntity.add("userId", P3_userId);
				result = restTemplate.postForObject(url, requestEntity, String.class);
				log.info("接口/v1.0/user/find/by/userid--RESULT================" + result);
				jsonObject = JSONObject.fromObject(result);
				String brandId = null;
				if (jsonObject.containsKey("result")) {
					JSONObject jobj = jsonObject.getJSONObject("result");
					brandId = jobj.getString("brandId");
				} else {
				}

				uri = util.getServiceUrl("facade", "error url request!");
				url = uri.toString() + "/v1.0/facade/topup";
				log.info("==============" + url + "===============");
				requestEntity = new LinkedMultiValueMap<String, String>();
				requestEntity.add("phone", loginPhone);
				requestEntity.add("amount", amount);
				requestEntity.add("channe_tag", "HL_PAY");
				requestEntity.add("order_desc", "信用卡消费任务");
				requestEntity.add("brand_id", brandId);
				requestEntity.add("bank_card", payCard);
				requestEntity.add("auth_code", id);
				log.info("接口/v1.0/facade/topup--参数================" + requestEntity);
				result = restTemplate.postForObject(url, requestEntity, String.class);
				log.info("接口/v1.0/facade/topup--RESULT================" + result);
				jsonObject = JSONObject.fromObject(result);
				if (CommonConstants.SUCCESS.equals(jsonObject.get("resp_code"))) {
					/*
					 * uri = util.getServiceUrl("paymentchannel",
					 * "error url request!"); url = uri.toString() +
					 * "/v1.0/paymentchannel/automaticrepaymenttask/update";
					 * requestEntity = new LinkedMultiValueMap<String,
					 * String>(); requestEntity.add("orderCode", P5_orderId);
					 * requestEntity.add("status", "3");//充值成功 result =
					 * restTemplate.postForObject(url, requestEntity,
					 * String.class); log.info(
					 * "接口/v1.0/paymentchannel/automaticrepaymenttask/update--RESULT================"
					 * +result);
					 */

					uri = util.getServiceUrl("paymentchannel", "error url request!");
					url = uri.toString() + "/v1.0/paymentchannel/spend/update/byordercode";
					requestEntity = new LinkedMultiValueMap<String, String>();
					requestEntity.add("orderCode", P5_orderId);
					requestEntity.add("amount", String.valueOf(amount));
					requestEntity.add("status", "3");// 消费成功
					requestEntity.add("message", "成功");
					result = restTemplate.postForObject(url, requestEntity, String.class);
					log.info("接口/v1.0/paymentchannel/spend/update/byordercode--RESULT================" + result);
				} else {
					/*
					 * uri = util.getServiceUrl("paymentchannel",
					 * "error url request!"); url = uri.toString() +
					 * "/v1.0/paymentchannel/automaticrepaymenttask/update";
					 * requestEntity = new LinkedMultiValueMap<String,
					 * String>(); requestEntity.add("orderCode", P5_orderId);
					 * requestEntity.add("status", "5");//充值失败 result =
					 * restTemplate.postForObject(url, requestEntity,
					 * String.class); log.info(
					 * "接口/v1.0/paymentchannel/automaticrepaymenttask/update--RESULT================"
					 * +result);
					 */
					if (jsonObject.containsKey("resp_message") && !"".equals(jsonObject.getString("resp_message"))) {
						/*
						 * if(jsonObject.getString("resp_message").contains(
						 * "余额不足")) { uri = util.getServiceUrl("paymentchannel",
						 * "error url request!"); url = uri.toString() +
						 * "/v1.0/paymentchannel/spend/update/byordercode";
						 * requestEntity = new LinkedMultiValueMap<String,
						 * String>(); requestEntity.add("orderCode",
						 * P5_orderId); requestEntity.add("amount",
						 * String.valueOf(amount)); requestEntity.add("status",
						 * "a"); requestEntity.add("message",
						 * jsonObject.getString("resp_message")); result =
						 * restTemplate.postForObject(url, requestEntity,
						 * String.class); log.info(
						 * "接口/v1.0/paymentchannel/spend/update/byordercode--RESULT================"
						 * +result); continue; }
						 * if(jsonObject.getString("resp_message").contains("入金"
						 * )) { uri = util.getServiceUrl("paymentchannel",
						 * "error url request!"); url = uri.toString() +
						 * "/v1.0/paymentchannel/spend/update/byordercode";
						 * requestEntity = new LinkedMultiValueMap<String,
						 * String>(); requestEntity.add("orderCode",
						 * P5_orderId); requestEntity.add("amount",
						 * String.valueOf(amount)); requestEntity.add("status",
						 * "b"); requestEntity.add("message",
						 * jsonObject.getString("resp_message")); result =
						 * restTemplate.postForObject(url, requestEntity,
						 * String.class); log.info(
						 * "接口/v1.0/paymentchannel/spend/update/byordercode--RESULT================"
						 * +result); continue; }
						 * if(jsonObject.getString("resp_message").contains("网银"
						 * )) { uri = util.getServiceUrl("paymentchannel",
						 * "error url request!"); url = uri.toString() +
						 * "/v1.0/paymentchannel/spend/update/byordercode";
						 * requestEntity = new LinkedMultiValueMap<String,
						 * String>(); requestEntity.add("orderCode",
						 * P5_orderId); requestEntity.add("amount",
						 * String.valueOf(amount)); requestEntity.add("status",
						 * "c"); requestEntity.add("message",
						 * jsonObject.getString("resp_message")); result =
						 * restTemplate.postForObject(url, requestEntity,
						 * String.class); log.info(
						 * "接口/v1.0/paymentchannel/spend/update/byordercode--RESULT================"
						 * +result); continue; }
						 */
						uri = util.getServiceUrl("paymentchannel", "error url request!");
						url = uri.toString() + "/v1.0/paymentchannel/spend/update/byordercode";
						requestEntity = new LinkedMultiValueMap<String, String>();
						requestEntity.add("orderCode", P5_orderId);
						requestEntity.add("amount", String.valueOf(amount));
						requestEntity.add("status", "5");// 其他
						requestEntity.add("message", jsonObject.getString("resp_message"));
						result = restTemplate.postForObject(url, requestEntity, String.class);
						log.info("接口/v1.0/paymentchannel/spend/update/byordercode--RESULT================" + result);
						continue;
					}
					uri = util.getServiceUrl("paymentchannel", "error url request!");
					url = uri.toString() + "/v1.0/paymentchannel/spend/update/byordercode";
					requestEntity = new LinkedMultiValueMap<String, String>();
					requestEntity.add("orderCode", P5_orderId);
					requestEntity.add("amount", String.valueOf(amount));
					requestEntity.add("status", "5");// 失败
					requestEntity.add("message", "失败原因不明");
					result = restTemplate.postForObject(url, requestEntity, String.class);
					log.info("接口/v1.0/paymentchannel/spend/update/byordercode--RESULT================" + result);
				}
			}
		}
	}
}
